{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "导入库"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "导入数据集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset = pd.read_csv('Social_Network_Ads.csv')\n",
    "X = dataset.iloc[:, [2, 3]].values\n",
    "y = dataset.iloc[:, 4].values"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将数据集拆分成训练集和测试集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "特征缩放"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\softwareinstallation\\anaconda\\lib\\site-packages\\sklearn\\utils\\validation.py:475: DataConversionWarning: Data with input dtype int64 was converted to float64 by StandardScaler.\n",
      "  warnings.warn(msg, DataConversionWarning)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "sc = StandardScaler()\n",
    "X_train = sc.fit_transform(X_train)\n",
    "X_test = sc.transform(X_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "调试训练集的随机森林"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "RandomForestClassifier(bootstrap=True, class_weight=None, criterion='entropy',\n",
       "            max_depth=None, max_features='auto', max_leaf_nodes=None,\n",
       "            min_impurity_decrease=0.0, min_impurity_split=None,\n",
       "            min_samples_leaf=1, min_samples_split=2,\n",
       "            min_weight_fraction_leaf=0.0, n_estimators=10, n_jobs=1,\n",
       "            oob_score=False, random_state=0, verbose=0, warm_start=False)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "classifier = RandomForestClassifier(n_estimators = 10, criterion = 'entropy', random_state = 0)\n",
    "classifier.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "预测测试集结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred = classifier.predict(X_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "生成混淆矩阵，也称作误差矩阵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import confusion_matrix\n",
    "cm = confusion_matrix(y_test, y_pred)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将训练集结果可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib.colors import ListedColormap\n",
    "X_set, y_set = X_train, y_train\n",
    "X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),\n",
    "                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))\n",
    "plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),\n",
    "             alpha = 0.75, cmap = ListedColormap(('red', 'green')))\n",
    "plt.xlim(X1.min(), X1.max())\n",
    "plt.ylim(X2.min(), X2.max())\n",
    "for i, j in enumerate(np.unique(y_set)):\n",
    "    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],\n",
    "                c = ListedColormap(('red', 'green'))(i), label = j)\n",
    "plt.title('Random Forest Classification (Training set)')\n",
    "plt.xlabel('Age')\n",
    "plt.ylabel('Estimated Salary')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将测试集结果可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib.colors import ListedColormap\n",
    "X_set, y_set = X_test, y_test\n",
    "X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),\n",
    "                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))\n",
    "plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),\n",
    "             alpha = 0.75, cmap = ListedColormap(('red', 'green')))\n",
    "plt.xlim(X1.min(), X1.max())\n",
    "plt.ylim(X2.min(), X2.max())\n",
    "for i, j in enumerate(np.unique(y_set)):\n",
    "    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],\n",
    "                c = ListedColormap(('red', 'green'))(i), label = j)\n",
    "plt.title('Random Forest Classification (Test set)')\n",
    "plt.xlabel('Age')\n",
    "plt.ylabel('Estimated Salary')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "##完成"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [default]",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
